Khái niệm Đối tượng bất biến

Biến bất biến

Trong lập trình mệnh lệnh, giá trị được giữ trong biến chương trình mà nội dung không bao giờ bị thay đổi được gọi là hằng số (constant) để phân biệt với những biến mà có thể được thay đổi trong quá trình thực thi. Ví dụ như hệ số chuyển đổi từ đơn vị met sang feet, hay giá trị của số pi với độ chính xác đến nhiều số thập phân.

Những trường chỉ đọc (read-only field) có thể được tính khi chương trình chạy (không như hằng số vốn được biết trước), nhưng không bao giờ thay đổi sau khi đã được khởi tạo.

Tính bất biến mạnh và yếu

Đôi khi, khi ai đó nói những trường nhất định của đối tượng là bất biến. Điều đó có nghĩa không có cách nào thay đổi những phần của trạng thái đối tượng, mặc dù những phần khác của đối tượng có thể được thay đổi (bất biến yếu - weakly immutable). Nếu tất cả các trường là bất biến, thì đối tượng đó cũng bất biến. Nếu toàn bộ đối tượng không thể được mở rộng bởi các lớp khác, đối tượng đó được gọi là bất biến mạnh (strongly immutable).[3]

Tham chiếu đến đối tượng

Trong hầu hết các ngôn ngữ hướng đối tượng, đối tượng có thể được tham chiếu đến bằng cách sử dụng tham chiếu. Một số ví dụ về các ngôn ngữ như vậy là Java, C++, C#, VB.NET, và nhiều ngôn ngữ lập trình kịch bản, như PythonRuby. Trong trường hợp này, trạng thái của một đối tượng có thể thay đổi khi các đối tượng được chia sẻ qua tham chiếu.

Sao chép đối tượng

Nếu một đối tượng được xem là bất biến, nó có thể được sao chép một cách đơn giản bằng cách tạo một bản sao của một tham chiếu tới nó thay vì phải sao chép toàn bộ đối tượng. Bởi vì một tham chiếu (thưởng chỉ có kích thước của một [[Con trỏ (khoa học máy tính)|con trỏ) sẽ nhỏ hơn rất nhiều so với chính đối tượng đó, điều này dẫn đến tiết kiệm bộ nhớ và khả năng tăng tốc độ thực hiện.

Kĩ thuật sao chép tham chiếu sẽ khó hơn nhiều cho đối tượng biến đổi, bởi vì nếu người dùng tham chiếu đến một đối tượng biến đổi và thay đổi nó, những người dùng khác có tham chiếu đến nó cũng sẽ nhìn thấy sự thay đổi đó. Đó không phải là hiệu ứng trong dự tính, sẽ khó khăn để thông báo cho những người dùng khác để họ phản hồi chính xác. Trong trường hợp đó, sao chép phòng thủ toàn bộ đối tượng thay vì chỉ mỗi tham chiếu sẽ là giải pháp dễ dàng hơn mặc dù tốn kém hơn. Mẫu observer pattern là một kĩ thuật thay thế để xử lý thay đổi cho các đối tượng biến đổi.

Tài liệu tham khảo

WikiPedia: Đối tượng bất biến http://c2.com/cgi/wiki?ImmutableObject http://www.javapractices.com/Topic29.cjp http://www.javaranch.com/journal/2003/04/immutable... http://www.oxfordlearnersdictionaries.com/definiti... http://www.yegor256.com/2014/06/09/objects-should-... https://persistent.codeplex.com/ https://msdn.microsoft.com/en-us/library/system.co... https://facebook.github.io/immutable-js/ https://web.archive.org/web/20101020235317/http://... https://www.nuget.org/packages/System.Collections....